home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / profile.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.9 KB  |  151 lines

  1. #ifndef _LINUX_PROFILE_H
  2. #define _LINUX_PROFILE_H
  3.  
  4. #include <linux/kernel.h>
  5. #include <linux/init.h>
  6. #include <linux/cpumask.h>
  7. #include <linux/cache.h>
  8.  
  9. #include <asm/errno.h>
  10.  
  11. #define CPU_PROFILING    1
  12. #define SCHED_PROFILING    2
  13. #define SLEEP_PROFILING    3
  14. #define KVM_PROFILING    4
  15.  
  16. struct proc_dir_entry;
  17. struct pt_regs;
  18. struct notifier_block;
  19.  
  20. #if defined(CONFIG_PROFILING) && defined(CONFIG_PROC_FS)
  21. void create_prof_cpu_mask(struct proc_dir_entry *de);
  22. int create_proc_profile(void);
  23. #else
  24. static inline void create_prof_cpu_mask(struct proc_dir_entry *de)
  25. {
  26. }
  27.  
  28. static inline int create_proc_profile(void)
  29. {
  30.     return 0;
  31. }
  32. #endif
  33.  
  34. enum profile_type {
  35.     PROFILE_TASK_EXIT,
  36.     PROFILE_MUNMAP
  37. };
  38.  
  39. #ifdef CONFIG_PROFILING
  40.  
  41. extern int prof_on __read_mostly;
  42.  
  43. /* init basic kernel profiler */
  44. int profile_init(void);
  45. int profile_setup(char *str);
  46. void profile_tick(int type);
  47.  
  48. /*
  49.  * Add multiple profiler hits to a given address:
  50.  */
  51. void profile_hits(int type, void *ip, unsigned int nr_hits);
  52.  
  53. /*
  54.  * Single profiler hit:
  55.  */
  56. static inline void profile_hit(int type, void *ip)
  57. {
  58.     /*
  59.      * Speedup for the common (no profiling enabled) case:
  60.      */
  61.     if (unlikely(prof_on == type))
  62.         profile_hits(type, ip, 1);
  63. }
  64.  
  65. struct task_struct;
  66. struct mm_struct;
  67.  
  68. /* task is in do_exit() */
  69. void profile_task_exit(struct task_struct * task);
  70.  
  71. /* task is dead, free task struct ? Returns 1 if
  72.  * the task was taken, 0 if the task should be freed.
  73.  */
  74. int profile_handoff_task(struct task_struct * task);
  75.  
  76. /* sys_munmap */
  77. void profile_munmap(unsigned long addr);
  78.  
  79. int task_handoff_register(struct notifier_block * n);
  80. int task_handoff_unregister(struct notifier_block * n);
  81.  
  82. int profile_event_register(enum profile_type, struct notifier_block * n);
  83. int profile_event_unregister(enum profile_type, struct notifier_block * n);
  84.  
  85. int register_timer_hook(int (*hook)(struct pt_regs *));
  86. void unregister_timer_hook(int (*hook)(struct pt_regs *));
  87.  
  88. struct pt_regs;
  89.  
  90. #else
  91.  
  92. #define prof_on 0
  93.  
  94. static inline int profile_init(void)
  95. {
  96.     return 0;
  97. }
  98.  
  99. static inline void profile_tick(int type)
  100. {
  101.     return;
  102. }
  103.  
  104. static inline void profile_hits(int type, void *ip, unsigned int nr_hits)
  105. {
  106.     return;
  107. }
  108.  
  109. static inline void profile_hit(int type, void *ip)
  110. {
  111.     return;
  112. }
  113.  
  114. static inline int task_handoff_register(struct notifier_block * n)
  115. {
  116.     return -ENOSYS;
  117. }
  118.  
  119. static inline int task_handoff_unregister(struct notifier_block * n)
  120. {
  121.     return -ENOSYS;
  122. }
  123.  
  124. static inline int profile_event_register(enum profile_type t, struct notifier_block * n)
  125. {
  126.     return -ENOSYS;
  127. }
  128.  
  129. static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n)
  130. {
  131.     return -ENOSYS;
  132. }
  133.  
  134. #define profile_task_exit(a) do { } while (0)
  135. #define profile_handoff_task(a) (0)
  136. #define profile_munmap(a) do { } while (0)
  137.  
  138. static inline int register_timer_hook(int (*hook)(struct pt_regs *))
  139. {
  140.     return -ENOSYS;
  141. }
  142.  
  143. static inline void unregister_timer_hook(int (*hook)(struct pt_regs *))
  144. {
  145.     return;
  146. }
  147.  
  148. #endif /* CONFIG_PROFILING */
  149.  
  150. #endif /* _LINUX_PROFILE_H */
  151.